With the advent of cloud computing, many application owners have started moving their deployments into the cloud. Cloud computing offers many benefits over traditional physical deployments including lower infrastructure costs and elastic resource allocation. These benefits can be especially advantageous for applications with a dynamic workload demand. Such applications can be deployed in the cloud based on the current demand, and the deployment can be scaled dynamically in response to changing workload demand. This is in contrast to the expensive and wasteful traditional physical deployments where the application is always provisioned with sufficient resources to handle worst-case workload demand.
While cloud computing is a promising option for application owners, it may not be easy to take full advantage of the benefits of the cloud. Specifically, while cloud computing offers flexible resource allocation, it is up to the customer (application owner) to leverage the flexible infrastructure. That is, the user must decide when and how to scale the application deployment to meet the changing workload demand. Since traditional deployments were often over-provisioned to handle worst-case demands, users never had to worry about dynamically resizing their deployment. However, to fully leverage the advantages of cloud computing, users will now have to worry about dynamically resizing their deployments.
Applications with a dynamic workload demand need access to a flexible infrastructure to meet performance guarantees and minimize resource costs. While cloud computing provides the elasticity to scale the infrastructure on demand, cloud service providers lack control and visibility of user space applications, making it difficult to accurately scale the underlying infrastructure. Thus, the burden of scaling falls on the user. That is, the user must determine when (to trigger scaling and how much to scale. Scaling becomes even more challenging when applications exhibit changes in their behavior during run-time.